package com;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Pattern : java 中正则表达式引擎
 * 
 * Matcher : 匹配器
 * 
 * 三种匹配模式 :
 * 
 * matches : 全词匹配
 * 
 * find : 在任意位置均可
 * 
 * lookingAt : 从前往后匹配
 * 
 * @author lenovo
 * @date 2020年7月23日
 */
public class _02_Matcher {

	public static void main(String[] args) {
		String regexTel = "\\d{11}";
		String tel = "12321321321321312";

		// 引擎
		Pattern pattern = Pattern.compile(regexTel);

		// 匹配器
		Matcher matcher = pattern.matcher(tel);

		// 全词匹配
		System.out.println(matcher.matches());

		// 相同的方法可以连用,不同就不要连用,需要重新创建匹配器
		matcher = pattern.matcher(tel);

		// 任意位置
		System.out.println(matcher.find());

		matcher = pattern.matcher(tel);
		// 前到后匹配
		System.out.println(matcher.lookingAt());

		/**
		 * find 和 group 一起使用,可以取出数据
		 */

		// 使用括号 对匹配到的数据进行分组,第一个()就是1组,第二个括号就是2组
		// ((...)电话号码是)1组
		// (...)2组
		// (\\d{11})三组
		regexTel = "((..)电话号码是)(\\d{11})";
		tel = "f1dasd小明电话号码是13113113111asdsad小黑电话号码是32112343223111";

		pattern = Pattern.compile(regexTel);
		matcher = pattern.matcher(tel);

		// find匹配,如果字符串中有多个复合条件的数据,匹配到第一个就停止
		// 想要获取下一个匹配的数据,值需要再次调用find方法即可

		while (matcher.find()) {
			// 0 是匹配到的数据,1 是第一组, 2 是第二组

			// 小明的电话号码是13113113111
			System.out.println(matcher.group());
			// 小明电话号码是 : 小明 : 13113113111
			System.out.println(matcher.group(1) + " : " + matcher.group(2) + " : " + matcher.group(3));

		}
	}

}
